#include "jeu.h"
#include <iostream>
#include <moteur.h>
#include <moteurjeu.h>
#include <moteuraudio.h>
#include <moteurgraphique.h>
//#include <boost/thread/mutex.hpp>
//#include <boost/asio.hpp>
//using namespace boost;

//Il va permettre de mettre en place les deux modes de communications des moteurs entre-eux
Jeu::Jeu()
{

    mJJ = new MoteurJeu(this);
    mGJ = new MoteurGraphique(this);
    mAJ = new MoteurAudio(this);

    //Liaison des modules entre-eux - les méthodes attacheMoteur... se contentent de recopier les adresses fournies dans les pointeurs vers les autres modules
    mJJ->attacheMoteurGraphique(mGJ);
    mJJ->attacheMoteurAudio(mAJ);

    mGJ->attacheMoteurJeu(mJJ);
    mGJ->attacheMoteurAudio(mAJ);

    mAJ->attacheMoteurJeu(mJJ);
    mAJ->attacheMoteurGraphique(mGJ);
}

//mutex mutexResterLancer;
bool resterLancer;

void Jeu::lancerJeu()
{
    bool resterLancerCourant = resterLancer;

    //création d'un verrou pour accèder au mutex afin d'être protégé d'accès concurrents
   // mutex::scoped_lock verrou(resterLancerCourant);
    //verrou.unlock();

    while (resterLancerCourant){
                    mJJ -> traitement();
                    mGJ -> traitement();
                    mAJ -> traitement();

                   // verrou.lock();
                            resterLancerCourant = resterLancer;
                   // verrou.unlock();
            }
}

void Jeu::stopperJeu()
{
   // mutex::scoped_lock verrou(mutexResterLancer);
    resterLancer = false;
}

Jeu::~Jeu()
{
    delete mJJ;
    delete mGJ;
    delete mAJ;
}
